﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lock
{
    class Program
    {
        private static object _lock = new object();
        static void Main(string[] args)
        {
            //表达式的方式
            System.Threading.Thread th = new System.Threading.Thread(() =>
            {
                DoJob();
            });
            th.Start();

            System.Threading.Thread th1 = new System.Threading.Thread(() =>
            {
                DoJob();
            });
            th1.Start();
        }

        private static void DoJob()
        {
            Console.WriteLine("开始处理...");
            for (var i = 0; i < 10; i++)
            {
                /*独占锁 被锁住的代码在同一个时间内只允许一个线程访问，其它的线程会被阻塞，只有等到这个锁被释放之后其它的线程才能执行被锁住的代码。
                 * 此外，还有读写锁(ReadWriteLock)，支持单个写线程和多个读线程的锁。该锁的作用主要是解决并发读的性能问题，使用该锁，可以大大提高数据并发访问的性能，只有在写时，才会阻塞所有的读锁。
                 * */
                lock (_lock)
                {
                    System.Threading.Thread.Sleep(1000);
                    Console.WriteLine("{0}", i + 1);
                }
            }
        }
    }
}
